import matplotlib.pyplot as plt
import numpy as np
from scipy.interpolate import make_interp_spline

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['figure.dpi'] = 100
plt.rcParams['figure.figsize'] = (10, 6)

# 数据
data = {
    "年份": [2021] * 8 + [2022] * 3,
    "月份": ["5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月", "1月", "2月", "3月"],
    "销量": [146, 198, 296, 412, 506, 615, 789, 1021, 3782, 3215, 2936]
}

# 插值平滑曲线
x = np.arange(len(data["月份"]))
y = np.array(data["销量"])
x_new = np.linspace(x.min(), x.max(), 300)  # 新x轴坐标
spl = make_interp_spline(x, y, k=2)  # 使用二次样条曲线
y_smooth = spl(x_new)

# 绘图
fig, ax = plt.subplots()
ax.plot(x_new, y_smooth, color='#FAA100', label='销量')
ax.scatter(x, y, color='#FFA500')  # 添加原始数据点

# 设置背景色为深蓝色
fig.patch.set_facecolor('#1B1D4E')
ax.set_facecolor('#1B1D4E')

# 设置坐标轴标签颜色
ax.tick_params(axis='x', colors='white')
ax.tick_params(axis='y', colors='white')
# 添加标题
plt.title('化妆品品类月度销量走势', fontsize=30, weight='bold', loc='left', pad=25, color='white')
# 添加子标题
plt.text(0.35, 1.025, '2022年销量迅速增加，1月最高，销量达到3782', ha='center', va='center',
         transform=plt.gca().transAxes, fontsize=20, color='white')
# 设置X轴刻度标签
categories = ["5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月", "1月", "2月", "3月"]
ax.set_xticks(x)
ax.set_xticklabels(categories)

# 显示网格
plt.grid(False)

# 设置X轴底部类别高亮
for i, tick in enumerate(ax.get_xticklabels()):
    if i < 8:  # 2021年部分
        tick.set_backgroundcolor('#80DAEB')
    else:  # 2022年部分
        tick.set_backgroundcolor('#F2D200')

ax.spines['bottom'].set_color('#5D607A')
for position in ['left', 'right', 'top']:
    ax.spines[position].set_color('none')

# 显示图表
plt.show()
